The present invention is directed to video-display workstations and terminals, particularly those whose display subsystems employ double buffering.
Workstations are high-performance computer systems that typically employ high-resolution graphic displays to display the results of the applications that they run. An application that a workstation runs may generate an animated display as its output; that is, it may repeatedly process information, generating different results each time, and these results are displayed in succession to give the illusion of motion. For instance, the workstation may compute the orbit of a planet around a star and the simultaneous motion of a satellite around a planet. It computes the effects of the various gravitational forces at successive time increments and displays the result of each time increment so as to provide an animated display of the planetary motion. The application requires not only the computation of different positions but also the computation of how the results should be depicted on the display, and it is convenient in a high-performance workstation to be able to deposit the results directly into the frame buffer. i.e., into the high-speed memory from which image data are retrieved in real time to drive the monitor's electron gun as the monitor is scanning its screen.
However, the results can be misleading if the user can see partial results. For instance, the application may compute the motion of the planet first and then that of the satellite. If it writes the results of the planet computation into the frame buffer first and then computes the satellite position, the new planet position may be displayed before the new satellite position, and this may give the misleading impression that the planet is leaving the satellite behind. Accordingly, the application would have to make provisions for storing the intermediate result in a location other than the frame buffer until the new position of the satellite is also computed. Furthermore, even with all of the new position information computed and the new images to represent those positions determined, it may not be possible to write the entire computed image into the frame buffer within the vertical blanking time of the monitor. Accordingly, the user sees each separate frame being "painted" onto the screen, and this may be undesirable.
In order to avoid this result, the work station can use double buffering, in which one frame buffer is used as the source of the video data while the application is writing a new image in a second frame buffer. When the new image has been completely written into the second frame buffer, the monitor can be switched from the first frame buffer as its image-data source to the second frame buffer, and a completely drawn image is always displayed on the screen.
Because of its avoidance of incomplete images, the double-buffer arrangement has many advantages. However, it does present some software complexity and detracts from software flexibility in windowing situations. A workstation often runs more than one application at a time and needs to display the results of several or all of them on the same monitor simultaneously. For this reason, "windows" are used; for instance, the output from one application may be displayed as a sort of background on the screen, while a small window on the screen occludes part of the background to display as a foreground image the results of a second application. That is, one application writes its results into an area of the frame buffer assigned to that application, while the other writes its results into another portion of the buffer.
Clearly, both of the applications can display in an animated fashion, and they can employ the double-buffering organization to avoid displaying partial results. But it adds significant complexity to do so because the two applications must be synchronized. Specifically, one application cannot simply require that the monitor switch frame buffers; it must also in some fashion communicate with the other application--possibly through a higher-level synchronizing program--to determine whether the other application has completed writing in the frame buffer to which the first application is ready to have the monitor be switched. This not only adds complexity but also detracts from flexibility, because a fast-operating application, which can generate new images at a rapid rate, is constrained to display those new images only at the rate of its slower companion application.